package controller;

import entity.Adesione;
import entity.Annuncio;
import entity.SitoAcquisti;
import entity.UtenteRegistrato;
import javax.ejb.Local;

/**
 * Metodi per inviare una e-mail
 * @author Ale
 */
@Local
public interface ControllerMailLocal {
    
    /**
     * Invia la mail che notifica all'iscritto l'accettazione della sua adesione da parte del creatore
     * @param iscritto iscritto all'annuncio
     * @param creatore creatore dell'annuncio
     * @param adesione adesione accettata
     */
    void sendMailAdesioneAccettata(UtenteRegistrato iscritto, UtenteRegistrato creatore, Adesione adesione);

    /**
     * Invia la mail che notifica all'iscritto il rifiuto della sua adesione da parte del creatore
     * @param iscritto iscritto all'annuncio
     * @param creatore creatore dell'annuncio
     * @param adesione adesione rifiutata
     */
    void sendMailAdesioneRifiutata(UtenteRegistrato iscritto, UtenteRegistrato creatore, Adesione adesione);

    /**
     * Invia la mail che notifica che un moderatore ha cancellato un annuncio creato dal destinatario
     * @param creatore creatore dell'annuncio
     * @param a annuncio cancellato
     */
    void sendMailAnnuncioCancellatoACreatore(UtenteRegistrato creatore, Annuncio a);

    /**
     * Invia la mail che notifica che un moderatore ha cancellato un annuncio a cui il destinatario era iscritto
     * @param creatore creatore dell'annuncio
     * @param iscritto iscritto all'annuncio
     * @param a annuncio cancellato
     */
    void sendMailAnnuncioCancellatoAIscritto(UtenteRegistrato creatore, UtenteRegistrato iscritto, Annuncio a);

    /**
     * Invia una mail all'iscritto di un annuncio che notifica che il creatore ha chiuso in anticipo tale annuncio
     * @param creatore creatore dell'annuncio
     * @param iscritto iscritto all'annuncio
     * @param a annuncio chiuso in anticipo
     */
    void sendMailAnnuncioChiuso(UtenteRegistrato creatore, UtenteRegistrato iscritto, Annuncio a);

    /**
     * Invia la mail che notifica che il creatore ha cancellato un annuncio a cui il destinatario era iscritto
     * @param creatore creatore dell'annuncio
     * @param iscritto iscritto all'annuncio
     * @param a sito a cui si riferiva l'annuncio
     */
    void sendMailAnnuncioRimossoAIscritto(UtenteRegistrato creatore, UtenteRegistrato iscritto, SitoAcquisti a);

    /**
     * Invia la mail che notifica che il creatore dell'annuncio ha controllato tutti gli articoli dell'adesione
     * @param iscritto iscritto all'annuncio
     * @param creatore creatore dell'annuncio
     * @param a adesione i cui articoli sono stati controllati
     */
    void sendMailArticoliControllati(UtenteRegistrato iscritto, UtenteRegistrato creatore, Adesione a);

    /**
     * Invia la mail al creatore dell'annuncio che notifica una modifica nell'adesione di un iscritto
     * @param iscritto iscritto all'annuncio
     * @param creatore creatore dell'annuncio
     * @param ad adesione modificata
     */
    void sendMailIscrizioneModificata(UtenteRegistrato iscritto, UtenteRegistrato creatore, Adesione ad);

    /**
     * Invia la mail al creatore dell'annuncio che notifica una nuova iscrizione al suo annuncio
     * @param iscritto nuovo iscritto all'annuncio
     * @param creatore creatore dell'annuncio
     * @param ad nuova adesione all'annuncio
     */
    void sendMailNuovaIscrizione(UtenteRegistrato iscritto, UtenteRegistrato creatore, Adesione ad);

    /**
     * Invia una mail a un utente che lo notifica che è stato bannato
     * @param u utente appena bannato
     */
    void sendMailUtenteBannato(UtenteRegistrato u);

    /**
     * Invia una mail a un utente che lo notifica che è stato declassato da moderatore a utente semplice
     * @param u utente declassato da moderatore
     */
    void sendMailUtenteDeclassatoDaModeratore(UtenteRegistrato u);

    /**
     * Invia la mail che notifica al creatore di un annuncio che un suo iscritto si è disiscritto
     * @param iscritto ex-iscritto
     * @param creatore creatore dell'annuncio
     * @param ad adesione cancellata
     */
    void sendMailUtenteDisiscritto(UtenteRegistrato iscritto, UtenteRegistrato creatore, Adesione ad);

    /**
     * Invia una mail a un utente che lo notifica che è stato promosso a moderatore
     * @param u utente promosso a moderatore
     */
    void sendMailUtentePromossoModeratore(UtenteRegistrato u);

    /**
     * Invia una mail a un iscritto ad un annuncio che lo notifica che il creatore di tale annuncio è stato bannato e quindi l'annuncio cancellato
     * @param bannando creatore dell'annuncio, bannato
     * @param iscritto iscritto all'annuncio
     * @param sito sito a cui si riferiva l'annuncio
     */
    public void sendMailBannatoAnnuncioCancellato(UtenteRegistrato bannando, UtenteRegistrato iscritto, SitoAcquisti sito);

    /**
     * Invia una mail al creatore di un annuncio che lo notifica che un iscritto a tale annuncio è stato bannato e quindi la sua adesone cancellata
     * @param creatoreAnnuncio creatore dell'annuncio
     * @param bannando ex-iscritto all'annuncio, bannato
     * @param sito sito a cui si riferisce l'annuncio
     */
    public void sendMailBannatoAdesioneCancellata(UtenteRegistrato creatoreAnnuncio, UtenteRegistrato bannando, SitoAcquisti sito);

    /**
     * Invia la mail che serve a verificare la validità dell'indirizzo e-mail fornito in fase di registrazione
     * @param utente l'utente da verificare
     */
    void sendMailVerifica(UtenteRegistrato utente);

    /**
     * Invia la mail che serve per reimpostare la password nel caso l'utente la perdesse
     * @param utente utente che ja perso la password
     */
    void sendMailPwd(UtenteRegistrato utente);
    
}
